# 55.跳跃游戏
# 给定一个非负整数数组nums ，你最初位于数组的第一个下标 。
# 数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。
#
# 示例1：
# 输入：nums = [2, 3, 1, 1, 4]
# 输出：true
# 解释：可以先跳1步，从下标0到达下标1, 然后再从下标1跳3步到达最后一个下标。
#
# 示例2：
# 输入：nums = [3, 2, 1, 0, 4]
# 输出：false
# 解释：无论怎样，总会到达下标为3的位置。但该下标的最大跳跃长度是0 ， 所以永远不可能到达最后一个下标。


class Solution:
    def canJump(self, nums:[int]) -> bool:
        # 跳跃覆盖范围究竟可不可以覆盖到终点
        cover = 0
        if len(nums) == 0:
            return True
        i = 0
        while i <= cover:
            cover = max(i+ nums[i],cover) # i+ nums[i] 表示该元素数值补充后的范围
            if cover >= len(nums)-1:
                return True
            i += 1
        return False



if __name__ == '__main__':
    nums = [2, 3, 1, 1, 4]
    # nums = [3, 2, 1, 0, 4]
    # nums = [2, 0]
    # nums = [1]
    tmp = Solution()
    res = tmp.canJump(nums)
    print(res)